# -*- coding: utf-8 -*-

def getSessoMaschile():
    row = db(db.sessi.is_maschile==True).select().first()
    return row if row else None


def getSessoFemminile():
    row = db(db.sessi.is_femminile==True).select().first()
    return row if row else None


def getStatoSfidaAttesa():
    row = db(db.stati_sfida.is_attesa==True).select().first()
    return row if row else None


def getStatoSfidaAccettata():
    row = db(db.stati_sfida.is_accettata==True).select().first()
    return row if row else None

def getStatoSfidaRifiutata():
    row = db(db.stati_sfida.is_rifiutata==True).select().first()
    return row if row else None



def getStatoCandidaturaAttesa():
    row = db(db.stati_candidatura.is_attesa==True).select().first()
    return row if row else None

def getStatoCandidaturaApprovata():
    row = db(db.stati_candidatura.is_approvata==True).select().first()
    return row if row else None

def getStatoCandidaturaRifiutata():
    row = db(db.stati_candidatura.is_rifiutata==True).select().first()
    return row if row else None




def getVideo(link):
    if link.find("youtube"):
        code = link.split("watch?v=")[1]
        return """<iframe width="398" height="224" src="//www.youtube.com/embed/%s" frameborder="0" allowfullscreen></iframe><br />"""%code
    return None


def hasSfideAperte():
    query = ((db.sfide.auth_user_id.contains(auth.user_id))&
             (db.sfide.stato_sfida_id==db.stati_sfida.id)&
             (db.stati_sfida.is_chiusa==None))
    return True if db(query).count()>0 else False


def checkUserValidity(iduser=None):    
    user = db.auth_user(auth.user_id) if iduser==None else db.auth_user(iduser)
    for key in ["sesso_id", "data_nascita", "peso"]:
        if user[key]==None:                        
            return False
    return True


def getUnreadMessages():
    return db((db.messaggio_destinatari.auth_user_id==auth.user_id)&(db.messaggio_destinatari.is_letto!=True)).count()

def getParentId(messaggio_id):    
    return db.messaggi(messaggio_id).parent_id 


def getDestinatariMessaggio(messaggio_id):
    destinatari = ""                                                        
    for row in db(db.messaggio_destinatari.messaggio_id==messaggio_id).select(db.auth_user.ALL,                                                                              
                                                                              left=[db.auth_user.on(db.messaggio_destinatari.auth_user_id==db.auth_user.id)]):
        destinatari += "<a href=%s>%s %s; </a>"%(URL("default", "wall", vars={"auth_user_id":row.id}), row.first_name, row.last_name)                   
    return XML(destinatari)    
    
    
def getRisultato(candidatura_id): 
    candidatura = db.candidatura(candidatura_id)
    sesso_id = db.auth_user(candidatura.auth_user_id).sesso_id
    # Prendo la scala di valutazione corretta
    query = ((db.sfide.id==db.candidatura(candidatura_id).sfida_id)&
             (db.scale_valutazione.test_id==db.sfide.test_id)&
             (db.scale_valutazione.sesso_id==sesso_id)&
             (db.scale_valutazione.pesoinizio<=candidatura.peso)&
             (db.scale_valutazione.pesofine>=candidatura.peso))
    scalavalutazione = db(query).select(db.scale_valutazione.ALL,
                                        orderby=(db.scale_valutazione.pesoinizio,
                                                 db.scale_valutazione.pesofine)).first()
    # Calcolo il livello ottenuto
    query = ((db.risultati.scala_valutazione_id==scalavalutazione.id)&
             (db.risultati.risultato>=candidatura.risultato))
    risultato = db(query).select(db.livelli.ALL,
                                 orderby=(db.risultati.risultato),
                                 left=[db.livelli.on(db.risultati.livello_id==db.livelli.id)]).first()  
    return risultato


def getValutazioneTest(test_id):
    headers = []
    elements = []
    for row in db(db.scale_valutazione.test_id==test_id).select(orderby=(db.scale_valutazione.sesso_id,
                                                                         db.scale_valutazione.pesoinizio,
                                                                         db.scale_valutazione.pesofine)):
        headers.append({"id":row.id, "descrizione":row.descrizione})
    for row in db(db.livelli.id>0).select(orderby=(db.livelli.ordine)):
        new_line = [row.livello]
        for element in headers:
            query = ((db.risultati.livello_id==row.id)&
                     (db.risultati.scala_valutazione_id==element["id"]))
            risultato = db(query).select().first()
            val = risultato.risultato if risultato else 0
            new_line.append(val)
        elements.append(new_line)
    return dict(headers=headers, elements=elements)    



def getPuntiSfida(livello_ordine):
    if livello_ordine in [1, 2, 3, 4]:
        return 1
    elif livello_ordine in [5, 6, 7, 8]:
        return 2
    else:
        return 4
        
    
    
    
    

 